package com.syt.msm.controller;

import com.syt.commer.Result;
import com.syt.msm.service.MsmService;
import com.syt.msm.utils.RandomUtil;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.concurrent.TimeUnit;

@Api(tags = "发送验证码")
@RestController
@RequestMapping("/api/msm")
public class MsmApiController {

    @Autowired
    private MsmService msmService;

    @Autowired
    private RedisTemplate<String,String> redisTemplate;

    //发送手机验证码
    @ApiOperation(value = "验证码")
    @GetMapping("send/{phone}")
    public Result sendCode(@PathVariable String phone) {

//从redis获取验证码，如果获取获取到，返回ok
        // key 手机号  value 验证码
        String code = redisTemplate.opsForValue().get(phone);
        System.out.println("验证码："+code);
//        判断验证码是否为空
        if(!StringUtils.isEmpty(code)) {
            return Result.ok();
        }
        //如果从redis获取不到，
        // 生成验证码，
        code = RandomUtil.getSixBitRandom();
        System.out.println("生成的严重码："+code);
        //调用service方法，通过整合短信服务进行发送
        boolean isSend = msmService.send(phone,code);
        //生成验证码放到redis里面，设置有效时间
        if(isSend) {
            redisTemplate.opsForValue().set(phone,code,2, TimeUnit.MINUTES);
//            redisTemplate.opsForValue().set(phone,"123456",2, TimeUnit.MINUTES);// 发送失败 传入虚假的 验证码， 因为没有申请来阿里云短信服务
            return Result.ok();
        } else {
            redisTemplate.opsForValue().set(phone,"123456",2, TimeUnit.MINUTES);// 发送失败 传入虚假的 验证码， 因为没有申请来阿里云短信服务
//            return Result.fail().message("发送短信失败,传入虚假的验证码123456");
            return Result.ok();// 设置一个假的登陆
        }

    }
    
    
    
    //发送手机验证码,qq邮箱的方式
    @ApiOperation(value = "QQ邮箱")
    @GetMapping("sendEmail/{email}")
    public Result sendEmailCode(@PathVariable String email) {
        //从redis获取验证码，如果获取获取到，返回ok
        // key 手机号  value 验证码
        String code = (String) redisTemplate.opsForValue().get(email);
        if(!StringUtils.isEmpty(code)) {
            return Result.ok();
        }
        //如果从redis获取不到，
        // 生成验证码，
        code =RandomUtil.getSixBitRandom();
        msmService.sendEmail(email,code);
        redisTemplate.opsForValue().set(email,code,5, TimeUnit.MINUTES);
        return Result.ok();
        
    }
    
    
    


/*
    //发送手机验证码
    @ApiOperation(value = "验证码")
    @GetMapping("send/{phone}")
    public Result sendCode(@PathVariable String phone) {

//从redis获取验证码，如果获取获取到，返回ok
        // key 手机号  value 验证码
        String code = redisTemplate.opsForValue().get(phone);
        if(!StringUtils.isEmpty(code)) {
            return Result.ok();
        }
        //如果从redis获取不到，
        // 生成验证码，
        code = RandomUtil.getSixBitRandom();
        System.out.println(code);
        //调用service方法，通过整合短信服务进行发送
        boolean isSend = msmService.send(phone,code);
        //生成验证码放到redis里面，设置有效时间
        if(isSend) {
//            redisTemplate.opsForValue().set(phone,code,2, TimeUnit.MINUTES);
            redisTemplate.opsForValue().set(phone,"123456",2, TimeUnit.MINUTES);// 发送失败 传入虚假的 验证码， 因为没有申请来阿里云短信服务
            return Result.ok();
        } else {
            redisTemplate.opsForValue().set(phone,"123456",2, TimeUnit.MINUTES);// 发送失败 传入虚假的 验证码， 因为没有申请来阿里云短信服务
            return Result.fail().message("发送短信失败,传入虚假的验证码123456");
        }

    }*/

}
